package com.iqiyi.dbagent.contraller.i;

import java.io.InputStream;
import java.util.List;

import com.iqiyi.dbagent.base.config.i.Configuration;
import com.iqiyi.dbagent.base.i.ISqlMonitorServer;
import com.iqiyi.dbagent.model.DealBefore;
import com.iqiyi.dbagent.model.DealAfter;

/**
 * @Title: DBAgentTemplate.java
 * @Package com.iqiyi.dbagent.contraller.i
 * @Description: 接收批量数据入库模板,
 * 接收数据可以是文件,或则流;
 * 支持多线程异步的方式,
 * 多线程事物同步的方式,
 * 模板可以配置
 * @author wangnianming
 * @date 2015年11月19日 下午5:22:17
 * @version V1.0
 */
public interface DBAgentTemplate {
    
	/**
	 * 处理之前
	 * @param config
	 * @return
	 */
	public abstract DealBefore dealBefore(Configuration config);

    /**
     * 以流的方式处理数据
     * @param is
     * @param config
     * @param handler
     * @return
     */
    public abstract DealAfter dealDataAsStreaming(InputStream is,Configuration config,IDataStoreHandler handler);
    
    /**
     * 
     * @param is
     * @param config
     * @param handler
     * @param iMonitor
     * @return
     */
    public abstract DealAfter dealDataAsStreaming(InputStream is,Configuration config,IDataStoreHandler handler,ISqlMonitorServer iMonitor);
    
    /**
     * 以数据文件列表的方式处理数据
     * @param fileList
     * @param config
     * @param handler
     * @return
     */
    public abstract DealAfter dealDataAsFile(List<String> fileList,Configuration config,IDataStoreHandler handler);

    /**
     * 以二进制的方式处理数据
     * @param bytes
     * @param config
     * @param handler
     * @return
     */
    public abstract DealAfter dealDataAsASCll(Byte[] bytes,Configuration config,IDataStoreHandler handler);

    /**
     * 以文本数据的方式处理数据
     * @param sbf
     * @param config
     * @param handler
     * @return
     */
    public abstract DealAfter dealDataAsText(StringBuffer sbf,Configuration config,IDataStoreHandler handler);

}
